Route53にサブドメインを登録して、SESのメール受信をトリガーにS3へ配信・Lambdaの実行をしてみた

Route53にサブドメインを登録して、SESのメール受信をトリガーにS3へ配信・Lambdaの実行をしてみた

Clock Icon2024.07.10

こんにちは、ゲームソリューション部のsoraです。
今回は、Route53にサブドメインを登録して、SESのメール受信をトリガーにS3へ配信・Lambdaの実行をしてみたことについて書いていきます。

前提条件

  • Route53へルートドメインが登録されていること

今回、SESはメール受信に利用するため、サンドボックス環境でも動作可能です。

Route53へのサブドメインの登録

Route53のホストジーンの作成にて、サブドメインを登録します。
登録後にルードドメインへNSレコードを追加します。

次に、SESのメール受信を使用するため、サブドメイン側にMXレコードを登録します。
今回は東京リージョンのため、以下のように登録します。
10 inbound-smtp.ap-northeast-1.amazonaws.com
sr-ses-lambda-01
ap-northeast-1の部分は、リージョンによって異なります。
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/receiving-email-mx-record.html

SESでドメインの登録

SESにてドメインを登録します。
IDの作成でサブドメインを入力して作成することで検証されます。
sr-ses-lambda-02

S3バケットのバケットポリシーの設定

SESから受信したメールを配置するS3バケットを作成します。
SESからオブジェクトの配置を許可するために、バケットポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{bucket-name}/*"
        }
    ]
}

Lambdaの作成

SESからのメール受信をトリガーに起動するLambdaを作成します。
起動することが確認できれば良いので、中身は何でも良いです。

def lambda_handler(event, context):
    print("Lambda Start")
    print(event)
    print(context)
    print("Lambda End")

SESでルールセットの設定

SESのEメール受信からルールセットを作成します。
ルールセットを作成して、ルールの作成から設定していきます。
ルールの作成にて、受信者の条件として認証済みのサブドメインを付けた適当なアドレスを指定します。
sr-ses-lambda-03
アクションの追加にて、先ほど作成したS3バケットへの配信・Lambda関数の呼び出しを設定します。
sr-ses-lambda-04

動作確認

GmailからSESのルール作成にて設定したアドレス宛にメールを送信します。
その後、S3バケットを確認してみるとメールが配置されていることが確認できました。
AMAZON_SES_SETUP_NOTIFICATIONは設定時に配置されるオブジェクトです)
sr-ses-lambda-05
またLambdaについても、CloudWatchにて動作したログを確認することができました。

メール送信からS3バケットに配置されるまで、ちょっと時間がかかったのは気になりました。

最後に

今回は、Route53にサブドメインを登録して、SESのメール受信をトリガーにS3へ配信・Lambdaの実行をしてみたことを記事にしました。
どなたかの参考になると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.